#ifndef HJX_H_INCLUDED
#define HJX_H_INCLUDED



#endif // HJX_H_INCLUDED
namespace hjx
{
    class string
    {
    public:
        string(const char *str="")
        :_str(new char [strlen(str)+1])
        {
            strcpy(_str,str);
        }
        //深拷贝传统写法
//        string(const string&s)
//        :_str(new char [strlen(s._str)+1])
//        {
//            strcpy(_str,s._str);
//        }
        //深拷贝现代写法1
        string (const string&s)
        :_str(nullptr)
        {
            string tmp(s._str);
            swap(_str,tmp._str);
        }
        //operator=传统写法
//        string& operator=(const string&s)
//        {
//            if(this!=&s)
//            {
//            char *tmp=new char[strlen(s._str)+1];
//            strcpy(tmp,s._str);
//            delete []_str;
//            _str=tmp;
//            }
//            return *this;
//
//        }
        //现代写法
//        string &operator=(const string &s)
//        {
//            if(this!=&s)
//            {
//            string tmp(s._str);
//            swap(_str,tmp._str);
//            }
//            return *this;
//        }
//       更现代的写法
        string &operator=(string s)
        {

            swap(_str,s._str);
            return *this;
        }
        size_t size()
        {
            return strlen(_str);
        }
        char& operator[](size_t i)
        {
            return _str[i];
        }
        ~string()
        {
            delete []_str;
            _str=nullptr;

        }
    private:
        char *_str;

    };
    void text1()
    {
        string s1("hjx");
        string s2(s1);
        string s3=s1;
        for(size_t i=0;i<s1.size();i++)
        {
            cout<<s1[i]<<" ";
        }
        cout<<endl;
        for(size_t i=0;i<s2.size();i++)
        {
            cout<<s2[i]<<" ";
        }
        cout<<endl;
        for(size_t i=0;i<s3.size();i++)
        {
            cout<<s3[i]<<" ";
        }
        cout<<endl;
    }
}
